home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / FROMUTS / CDUNGEON / !CDUNGEON / c / DSO3 < prev    next >
Text File  |  1991-05-20  |  4KB  |  206 lines

  1. /* FINDXT- FIND EXIT FROM ROOM */
  2.  
  3. /*COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142*/
  4. /* ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED */
  5. /* WRITTEN BY R. M. SUPNIK */
  6.  
  7. #include <stdio.h>
  8. #include "funcs.h"
  9. #include "vars.h"
  10.  
  11. logical findxt_(dir, rm)
  12. integer dir;
  13. integer rm;
  14. {
  15.     /* System generated locals */
  16.     logical ret_val;
  17.  
  18.     /* Local variables */
  19.     integer i, xi;
  20.     integer xxxflg;
  21.  
  22.     ret_val = TRUE_;
  23. /*                         !ASSUME WINS. */
  24.     xi = rooms_1.rexit[rm - 1];
  25. /*                         !FIND FIRST ENTRY. */
  26.     if (xi == 0) {
  27.     goto L1000;
  28.     }
  29. /*                         !NO EXITS? */
  30.  
  31. L100:
  32.     i = exits_1.travel[xi - 1];
  33. /*                         !GET ENTRY. */
  34.     curxt_1.xroom1 = i & xpars_1.xrmask;
  35. /* mask to 16-bits to get rid of sign extension problems with 32-bit ints 
  36. */
  37.     xxxflg = ~ xpars_1.xlflag & 65535;
  38.     curxt_1.xtype = ((i & xxxflg) / xpars_1.xfshft & xpars_1.xfmask) + 1;
  39.     switch (curxt_1.xtype) {
  40.     case 1:  goto L110;
  41.     case 2:  goto L120;
  42.     case 3:  goto L130;
  43.     case 4:  goto L130;
  44.     }
  45. /*                         !BRANCH ON ENTRY. */
  46.     bug_(10, curxt_1.xtype);
  47.  
  48. L130:
  49.     curxt_1.xobj = exits_1.travel[xi + 1] & xpars_1.xrmask;
  50.     curxt_1.xactio = exits_1.travel[xi + 1] / xpars_1.xashft;
  51. L120:
  52.     curxt_1.xstrng = exits_1.travel[xi];
  53. /*                         !DOOR/CEXIT/NEXIT - STRING. */
  54. L110:
  55.     xi += xpars_1.xelnt[curxt_1.xtype - 1];
  56. /*                         !ADVANCE TO NEXT ENTRY. */
  57.     if ((i & xpars_1.xdmask) == dir) {
  58.     return ret_val;
  59.     }
  60.     if ((i & xpars_1.xlflag) == 0) {
  61.     goto L100;
  62.     }
  63. L1000:
  64.     ret_val = FALSE_;
  65. /*                         !YES, LOSE. */
  66.     return ret_val;
  67. } /* findxt_ */
  68.  
  69. /* FWIM- FIND WHAT I MEAN */
  70.  
  71. /* DECLARATIONS */
  72.  
  73. integer fwim_(f1, f2, rm, con, adv, nocare)
  74. integer f1;
  75. integer f2;
  76. integer rm;
  77. integer con;
  78. integer adv;
  79. logical nocare;
  80. {
  81.     /* System generated locals */
  82.     integer ret_val, i__1, i__2;
  83.  
  84.     /* Local variables */
  85.     integer i, j;
  86.  
  87.  
  88. /* OBJECTS */
  89.  
  90.  
  91.  
  92.  
  93.     ret_val = 0;
  94. /*                         !ASSUME NOTHING. */
  95.     i__1 = objcts_1.olnt;
  96.     for (i = 1; i <= i__1; ++i) {
  97. /*                         !LOOP */
  98.     if ((rm == 0 || objcts_1.oroom[i - 1] != rm) && (adv == 0 || 
  99.         objcts_1.oadv[i - 1] != adv) && (con == 0 || objcts_1.ocan[
  100.         i - 1] != con)) {
  101.         goto L1000;
  102.     }
  103.  
  104. /* OBJECT IS ON LIST... IS IT A MATCH? */
  105.  
  106.     if ((objcts_1.oflag1[i - 1] & VISIBT) == 0) {
  107.         goto L1000;
  108.     }
  109.     if (~ (nocare) & (objcts_1.oflag1[i - 1] & TAKEBT) == 0 || (
  110.         objcts_1.oflag1[i - 1] & f1) == 0 && (objcts_1.oflag2[i - 1] 
  111.         & f2) == 0) {
  112.         goto L500;
  113.     }
  114.     if (ret_val == 0) {
  115.         goto L400;
  116.     }
  117. /*                         !ALREADY GOT SOMETHING? */
  118.     ret_val = -ret_val;
  119. /*                         !YES, AMBIGUOUS. */
  120.     return ret_val;
  121.  
  122. L400:
  123.     ret_val = i;
  124. /*                         !NOTE MATCH. */
  125.  
  126. /* DOES OBJECT CONTAIN A MATCH? */
  127.  
  128. L500:
  129.     if ((objcts_1.oflag2[i - 1] & OPENBT) == 0) {
  130.         goto L1000;
  131.     }
  132.     i__2 = objcts_1.olnt;
  133.     for (j = 1; j <= i__2; ++j) {
  134. /*                         !NO, SEARCH CONTENTS. */
  135.         if (objcts_1.ocan[j - 1] != i || (objcts_1.oflag1[j - 1] & 
  136.             VISIBT) == 0 || (objcts_1.oflag1[j - 1] & f1) ==
  137.              0 && (objcts_1.oflag2[j - 1] & f2) == 0) {
  138.         goto L700;
  139.         }
  140.         if (ret_val == 0) {
  141.         goto L600;
  142.         }
  143.         ret_val = -ret_val;
  144.         return ret_val;
  145.  
  146. L600:
  147.         ret_val = j;
  148. L700:
  149.         ;
  150.     }
  151. L1000:
  152.     ;
  153.     }
  154.     return ret_val;
  155. } /* fwim_ */
  156.  
  157. /* YESNO- OBTAIN YES/NO ANSWER */
  158.  
  159. /* CALLED BY- */
  160.  
  161. /*     YES-IS-TRUE=YESNO(QUESTION,YES-STRING,NO-STRING) */
  162.  
  163. logical yesno_(q, y, n)
  164. integer q;
  165. integer y;
  166. integer n;
  167. {
  168.     /* System generated locals */
  169.     logical ret_val;
  170.  
  171.     /* Local variables */
  172.     char ans[100];
  173.  
  174. L100:
  175.     rspeak_(q);
  176. /*                         !ASK */
  177.     (void) fflush(stdout);
  178.     (void) fgets(ans, sizeof ans, stdin);
  179.     more_input();
  180. /*                         !GET ANSWER */
  181.     if (*ans == 'Y' || *ans == 'y') {
  182.     goto L200;
  183.     }
  184.     if (*ans == 'N' || *ans == 'n') {
  185.     goto L300;
  186.     }
  187.     rspeak_(6);
  188. /*                         !SCOLD. */
  189.     goto L100;
  190.  
  191. L200:
  192.     ret_val = TRUE_;
  193. /*                         !YES, */
  194.     rspeak_(y);
  195. /*                         !OUT WITH IT. */
  196.     return ret_val;
  197.  
  198. L300:
  199.     ret_val = FALSE_;
  200. /*                         !NO, */
  201.     rspeak_(n);
  202. /*                         !LIKEWISE. */
  203.     return ret_val;
  204.  
  205. } /* yesno_ */
  206.